package com.xyy.controller;

import com.xyy.common.PageResult;
import com.xyy.common.Result;
import com.xyy.entity.Admin;
import com.xyy.service.AdminService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 管理员管理控制器
 * 超级管理员可以管理普通管理员
 */
@Slf4j
@RestController
@RequestMapping("/admin-manage")
@Validated
public class AdminManageController {

    @Autowired
    private AdminService adminService;

    /**
     * 创建管理员（仅超级管理员）
     */
    @PostMapping("/create")
    public Result<Void> createAdmin(@Valid @RequestBody Admin createDTO) {
        try {
            // 只允许创建普通管理员
            if (createDTO.getLevel() == 2) {
                return Result.error("不能创建超级管理员");
            }
            adminService.createAdmin(createDTO);
            return Result.success();
        } catch (Exception e) {
            log.error("创建管理员失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 更新管理员信息（仅超级管理员）
     */
    @PutMapping("/update")
    public Result<Void> updateAdmin(@Valid @RequestBody Admin admin) {
        try {
            // 检查要更新的管理员是否存在
            Admin existingAdmin = adminService.getAdminById(admin.getId());
            if (existingAdmin == null) {
                return Result.error("管理员不存在");
            }
            
            // 不能将普通管理员升级为超级管理员
            if (existingAdmin.getLevel() == 1 && admin.getLevel() == 2) {
                return Result.error("不能将普通管理员升级为超级管理员");
            }
            
            adminService.updateAdmin(admin);
            return Result.success();
        } catch (Exception e) {
            log.error("更新管理员失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 软删除管理员（仅超级管理员）
     */
    @DeleteMapping("/delete/{adminId}")
    public Result<Void> deleteAdmin(@PathVariable Long adminId) {
        try {
            adminService.deleteAdmin(adminId);
            return Result.success();
        } catch (Exception e) {
            log.error("删除管理员失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 批量软删除管理员（仅超级管理员）
     */
    @DeleteMapping("/batch-delete")
    public Result<Void> batchDeleteAdmin(@RequestBody List<Long> adminIds) {
        try {
            adminService.batchDeleteAdmin(adminIds);
            return Result.success();
        } catch (Exception e) {
            log.error("批量删除管理员失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 分页查询管理员（仅超级管理员）
     */
    @PostMapping("/page")
    public Result<PageResult<Admin>> pageQuery(@RequestBody Admin admin,
                                              @RequestParam(defaultValue = "1") Integer current,
                                              @RequestParam(defaultValue = "10") Integer size) {
        try {
            PageResult<Admin> result = adminService.pageQuery(admin, current, size);
            return Result.success(result);
        } catch (Exception e) {
            log.error("分页查询管理员失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 查询管理员详情（仅超级管理员）
     */
    @GetMapping("/detail/{adminId}")
    public Result<Admin> getAdminDetail(@PathVariable Long adminId) {
        try {
            Admin admin = adminService.getAdminById(adminId);
            if (admin == null) {
                return Result.error("管理员不存在");
            }
            return Result.success(admin);
        } catch (Exception e) {
            log.error("查询管理员详情失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }

    /**
     * 获取管理员列表（仅超级管理员）
     */
    @GetMapping("/list")
    public Result<List<Admin>> getAdminList() {
        try {
            List<Admin> admins = adminService.getAllAdmins();
            return Result.success(admins);
        } catch (Exception e) {
            log.error("获取管理员列表失败: {}", e.getMessage());
            return Result.error(e.getMessage());
        }
    }
} 